package com.imti.mall.product.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.imti.mall.model.pms.dto.PmsProductCategoryResult;
import com.imti.mall.model.pms.pojo.PmsProductCategory;
import com.imti.mall.model.pms.pojo.PmsProductCategoryAttributeRelation;
import com.imti.mall.model.pms.vo.PmsProductCategoryVo;
import com.imti.mall.product.mapper.PmsProductCategoryAttributeRelationMapper;
import com.imti.mall.product.mapper.PmsProductCategoryMapper;
import com.imti.mall.product.service.PmsProductCategoryService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class PmsProductCategoryServiceImpl extends ServiceImpl<PmsProductCategoryMapper, PmsProductCategory> implements PmsProductCategoryService {

    @Resource
    private PmsProductCategoryMapper pmsProductCategoryMapper;
    @Resource
    private PmsProductCategoryAttributeRelationMapper pmsProductCategoryAttributeRelationMapper;


    @Override
    public List<PmsProductCategory> findPmsProductCategory(Integer parentId) {
        return pmsProductCategoryMapper.findPmsProductCategory(parentId);
    }

    @Override
    public PmsProductCategory getPmsProductCategoryById(Integer id) {
        return pmsProductCategoryMapper.getPmsProductCategoryById(id);
    }

    @Override
    public int updatePmsProductCategory(PmsProductCategoryVo pmsProductCategoryVo) {
       // if(pmsProductCategoryVo!=null){
            int finalResult=0;
            int resultCate=pmsProductCategoryMapper.updateProductCate(pmsProductCategoryVo);
            int id = Math.toIntExact(pmsProductCategoryVo.getId());

            if(pmsProductCategoryVo.getProductAttributeIdList()!=null){
                for(int i=0;i<pmsProductCategoryVo.getProductAttributeIdList().size();i++){
                    int attrId= (int) pmsProductCategoryVo.getProductAttributeIdList().get(i);

                    PmsProductCategoryAttributeRelation result =pmsProductCategoryAttributeRelationMapper.getOnePmsProductCategoryAttributeRelation(id,attrId);
                    if(result!= null){
                        Long relationId=result.getId();
                        int resultRelation = pmsProductCategoryAttributeRelationMapper.updatePmsProductCategoryAttributeRelation(relationId,attrId);
                        finalResult +=resultRelation;
                    }else {
                        int resultRelation =pmsProductCategoryAttributeRelationMapper.insertPmsProductCategoryAttributeRelation(id,attrId);
                        finalResult +=resultRelation;
                    }
                }
            }
            return finalResult+resultCate;
        /*} else{
            if(navStatus!=null){
                return pmsProductCategoryMapper.updateNavStatus(id,navStatus);
            }else {
                return pmsProductCategoryMapper.updateShowStatus(id,showStatus);
            }
        }*/
    }

    @Override
    public int deleteProductCate(Integer id) {
        return pmsProductCategoryMapper.deleteProductCate(id);
    }

    @Override
    public int createProductCate(PmsProductCategoryVo pmsProductCategoryVo) {
        return pmsProductCategoryMapper.createProductCate(pmsProductCategoryVo);
    }

    @Override
    public List<PmsProductCategoryResult> fetchListWithChildren() {
        QueryWrapper<PmsProductCategory> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("level",0);
        List<PmsProductCategoryResult> pmsProductCategoryResults=new ArrayList<PmsProductCategoryResult>();

        List<PmsProductCategory> pmsProductCategories = pmsProductCategoryMapper.selectList(queryWrapper);
        for (int i=0;i<pmsProductCategories.size();i++){
            PmsProductCategoryResult pmsProductCategoryResult = BeanUtil.toBean(pmsProductCategories.get(i), PmsProductCategoryResult.class);
            pmsProductCategoryResults.add(pmsProductCategoryResult);
        }
        for (int i=0;i<pmsProductCategoryResults.size();i++){
            QueryWrapper queryWrapper1=new QueryWrapper<>();
            Map map=new HashMap<>();
            map.put("level",1);
            map.put("parent_id",pmsProductCategoryResults.get(i).getId());
            queryWrapper1.allEq(map);
            List<PmsProductCategory> child = pmsProductCategoryMapper.selectList(queryWrapper1);
            pmsProductCategoryResults.get(i).setChildren(child);

        }




        return pmsProductCategoryResults;
    }
}
